<?php

/**
 * 附件模型
 * @author yupoxiong<i@yufuping.com>
 */

namespace app\common\model;

use think\model\concern\SoftDelete;

class Attachment extends Model
{
    use SoftDelete;

    protected $name = 'attachment';
    protected $autoWriteTimestamp = true;

    protected $fileType = [
        '图片'   => ['jpg', 'bmp', 'png', 'jpeg', 'gif', 'svg'],
        '文档'   => ['txt', 'doc', 'docx', 'xls', 'xlsx', 'pdf'],
        '压缩文件' => ['rar', 'zip', '7z', 'tar'],
        '音视'   => ['mp3', 'ogg', 'flac', 'wma', 'ape'],
        '视频'   => ['mp4', 'wmv', 'avi', 'rmvb', 'mov', 'mpg']
    ];

    protected $fileThumb = [
        'picture'      => ['jpg', 'bmp', 'png', 'jpeg', 'gif', 'svg'],
        'txt.svg'      => ['txt', 'pdf'],
        'pdf.svg'      => ['pdf'],
        'word.svg'     => ['doc', 'docx'],
        'excel.svg'    => ['xls', 'xlsx'],
        'archives.svg' => ['rar', 'zip', '7z', 'tar'],
        'audio.svg'    => ['mp3', 'ogg', 'flac', 'wma', 'ape'],
        'video.svg'    => ['mp4', 'wmv', 'avi', 'rmvb', 'mov', 'mpg']
    ];

    protected function initialize()
    {
        $thumb_path      = config('attachment.thumb_path');
        $this->fileThumb = [
            'picture'                    => ['jpg', 'bmp', 'png', 'jpeg', 'gif', 'svg'],
            $thumb_path . 'txt.svg'      => ['txt', 'pdf'],
            $thumb_path . 'pdf.svg'      => ['pdf'],
            $thumb_path . 'word.svg'     => ['doc', 'docx'],
            $thumb_path . 'excel.svg'    => ['xls', 'xlsx'],
            $thumb_path . 'archives.svg' => ['rar', 'zip', '7z', 'tar'],
            $thumb_path . 'audio.svg'    => ['mp3', 'ogg', 'flac', 'wma', 'ape'],
            $thumb_path . 'video.svg'    => ['mp4', 'wmv', 'avi', 'rmvb', 'mov', 'mpg']
        ];
        parent::initialize();
    }

    //关联后台用户
    public function adminUser()
    {
        return $this->belongsTo('AdminUser', 'admin_user_id', 'id');
    }

    //关联前台用户
    public function User()
    {
        return $this->belongsTo('User', 'user_id', 'id');
    }

    //格式化大小
    // public function getSizeAttr($value)
    // {
    //     $units = array(' B', ' KB', ' MB', ' GB', ' TB');
    //     for ($i = 0; $value >= 1024 && $i < 4; $i++) {
    //         $value /= 1024;
    //     }
    //     return round($value, 2) . $units[$i];
    // }

    //文件分类
    // public function getFileTypeAttr($value, $data)
    // {
    //     $type      = '其他';
    //     $extension = $data['extension'];
    //     foreach ($this->fileType as $name => $array) {
    //         if (in_array($extension, $array)) {
    //             $type = $name;
    //             break;
    //         }
    //     }
    //     return $type;
    // }


    // //文件预览
    // public function getThumbnailAttr($value, $data)
    // {
    //     $thumbnail = config('attachment.thumb_path') . 'unknown.svg';
    //     $extension = $data['extension'];
    //     foreach ($this->fileThumb as $name => $array) {
    //         if (in_array($extension, $array)) {
    //             $thumbnail = $name === 'picture' ? $data['url'] : $name;
    //             break;
    //         }
    //     }
    //     return $thumbnail;
    // }
    // public function setSaveNameAttr($value, $data)
    // {
    //     $array = explode('\\', $value);
    //     return end($array);
    // }
    // public function getFileUrlAttr($value, $data)
    // {
    //     $request = request();
    //     $url_pre = $request->scheme() . '://' . $request->host();
    //     return $url_pre . $data['url'];
    // }


    // public function upload($name, $path = '', $validate = [], $admin_user_id = 0, $user_id = 0)
    // {

    //     if (!$_FILES[$name]['name']) {
    //         $this->error = '请选择文件';
    //         return false;
    //     }

    //     $file = request()->withFiles([$name => $_FILES[$name]])->file($name);
    //     if ($file) {
    //         $file_path = config('attachment.path') . $path;
    //         $validate  = array_merge(config('attachment.validate'), $validate);
    //         try {
    //             validate(['file' => 'filesize:10240'])->check((array)$file);
    //             $info  = \think\facade\Filesystem::putFile($file_path, $file);
    //             if ($info) {
    //                 $file_info = [
    //                     'admin_user_id' => $admin_user_id,
    //                     'user_id'       => $user_id,
    //                     'original_name' => $file->getOriginalName(),
    //                     'save_name'     => $file->hashName(),
    //                     'save_path'     => '/' . str_replace("\\", '/',  $info),
    //                     'extension'     => $file->extension(),
    //                     'mime'          => $file->getOriginalMime(),
    //                     'size'          => $file->getSize(),
    //                     'md5'           => $file->hash('md5'),
    //                     'sha1'          => $file->hash(),
    //                     'url'           => '/' . str_replace("\\", '/',  $info)
    //                 ];
    //                 return self::create($file_info);
    //             }
    //         } catch (\think\exception\ValidateException $e) {
    //             $this->error = $e->getMessage();
    //         }
    //     } else {
    //         $this->error = '无法获取文件';
    //     }
    //     return false;
    // }


    // /**
    //  * @param $name
    //  * @param string $path
    //  * @param array $validate
    //  * @param int $admin_user_id
    //  * @param int $user_id
    //  * @return array|bool
    //  */
    // public function uploadMulti($name, $path = '', $validate = [], $admin_user_id = 0, $user_id = 0)
    // {
    //     $result = [];

    //     $files = request()->withFiles([$name => $_FILES[$name]])->file($name);

    //     $file_path = config('attachment.path') . $path;
    //     $validate  = array_merge(config('attachment.validate'), $validate);

    //     if ($files) {
    //         foreach ($files as $file) {
    //             try {

    //                 validate(['file' => 'filesize:10240'])->check((array)$file);
    //                 $info  = \think\facade\Filesystem::putFile($file_path, $file);
    //                 if ($info) {
    //                     $file_info = [
    //                         'admin_user_id' => $admin_user_id,
    //                         'user_id'       => $user_id,
    //                         'original_name' => $file->getOriginalName(),
    //                         'save_name'     => $file->hashName(),
    //                         'save_path'     => '/' . str_replace("\\", '/',  $info),
    //                         'extension'     => $file->extension(),
    //                         'mime'          => $file->getOriginalMime(),
    //                         'size'          => $file->getSize(),
    //                         'md5'           => $file->hash('md5'),
    //                         'sha1'          => $file->hash(),
    //                         'url'           => '/' . str_replace("\\", '/',  $info)
    //                     ];
    //                     $file_item = self::create($file_info);
    //                     $result[]  = $file_item->url;
    //                 }
    //             } catch (\think\exception\ValidateException $e) {
    //                 $this->error = $e->getMessage();
    //             }
    //         }
    //         if (count($result) > 0) {
    //             return $result;
    //         }

    //         return false;
    //     }

    //     $this->error = '无法获取文件';
    //     return false;
    // }
}
